type Page = {
  path: string;
  label: string;
};

// as const 将每个属性都添加为readonly
/**
 * 
使用 as const:
as const 将 pages 数组及其元素的所有属性设为只读和常量类型。例如，path 的类型将被推断为 '/' | '/dashboard'，label 的类型将被推断为 'Home' | 'Dashboard'。

使用 satisfies readonly Page[]:
satisfies 确保 pages 数组符合 readonly Page[] 类型，意味着每个元素必须包含 path 和 label 属性，并且它们的类型分别是 string。这提供了一层类型检查，确保 pages 数组的结构符合预期。
*/
const pages = [
  {
    path: "/",
    label: "Home",
  },
  {
    path: "/dashboard",
    label: "Dashboard",
  },
] as const satisfies readonly Page[];

pages[1].label;

type User = {
  status: "authenticated" | "unauthenticated";
  id: string;
  username: string;
};

/**
 * 使用 satisfies 关键字可以在 TypeScript 中确保对象符合特定类型的所有约束，同时保留额外属性的灵活性。它在定义对象字面量时提供了更强的类型检查能力和更精确的类型推断，有助于编写更加健壮和可维护的代码
 */
const user2: User = {
  status: "authenticated",
  id: "123",
  username: "admin",
} satisfies User;

export {};
